package org.springframework.security.access;

import org.springframework.security.authorization.AuthorizationManager;
import org.springframework.security.core.Authentication;

import java.util.Collection;

/**
 * @author Dillon
 * @date 2024/6/26
 * @slogan 致敬大师 致敬未来的你
 * @desc 授权投票器，用于检查用户是否存在响应角色，进而投出赞成票 返回票或则和弃权票
 * 该方法已过时，现在由{@linkplain AuthorizationManager 替代}
 */
@Deprecated
public interface AccessDecisionVoter<S> {

	int ACCESS_GRANTED = 1;

	int ACCESS_ABSTAIN = 0;

	int ACCESS_DENIED = -1;

	/**
	 * 权限决策器是否支持当前权限
	 *
	 * @param attribute 权限封装对象
	 * @return
	 */
	boolean supports(ConfigAttribute attribute);

	/**
	 * 权限决策器是否支持当前权限决策
	 *
	 * @param clazz 权限决策class类
	 * @return
	 */
	boolean supports(Class<?> clazz);

	/**
	 * 权限决策，判断当前请求是否具有访问权限
	 *
	 * @param authentication 认证对象
	 * @param object         封装请求对象
	 * @param attributes     权限列表
	 * @return
	 */
	int vote(Authentication authentication, S object, Collection<ConfigAttribute> attributes);

}
